package obra;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;



import apartamento.Apartamento;

import construtora.Construtora;


import cliente.Cliente;
import etapaObra.EtapaObra;




@Entity
public class Obra {
	@Id
	@GeneratedValue
	@Column(name="obra_id")
	private Integer codigo;
	
	@OneToMany(mappedBy="obra")
    private List<Cliente> clientes;
	
	@OneToMany(mappedBy="obra")
    private List<Apartamento> apartamentos;
	
	@OneToMany(mappedBy="obra")
    private List<EtapaObra> etapasObra;
	
	@ManyToOne
    @JoinColumn(name="construtora_id")
    private Construtora construtora;
	
	private String titulo;
	private String descricaoGeral;
	private String endereco;
	private String responsavelGeral;
	private String responsavelEngenheiro;
	private Double tamanhoLote;
	private Date datainicio;
	private Date datatermino;
	private Integer quantApAndar;
	private Integer quantAndares;
	private String descricaAreaLazer;
	private byte[] imagem;
	
	public Integer getCodigo() {
		return codigo;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	public List<Cliente> getClientes() {
		return clientes;
	}
	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}
	public List<Apartamento> getApartamentos() {
		return apartamentos;
	}
	public void setApartamentos(List<Apartamento> apartamentos) {
		this.apartamentos = apartamentos;
	}
	public List<EtapaObra> getEtapasObra() {
		return etapasObra;
	}
	public void setEtapasObra(List<EtapaObra> etapasObra) {
		this.etapasObra = etapasObra;
	}
	public Construtora getConstrutora() {
		return construtora;
	}
	public void setConstrutora(Construtora construtora) {
		this.construtora = construtora;
	}
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	public String getDescricaoGeral() {
		return descricaoGeral;
	}
	public void setDescricaoGeral(String descricaoGeral) {
		this.descricaoGeral = descricaoGeral;
	}
	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public String getResponsavelGeral() {
		return responsavelGeral;
	}
	public void setResponsavelGeral(String responsavelGeral) {
		this.responsavelGeral = responsavelGeral;
	}
	public String getResponsavelEngenheiro() {
		return responsavelEngenheiro;
	}
	public void setResponsavelEngenheiro(String responsavelEngenheiro) {
		this.responsavelEngenheiro = responsavelEngenheiro;
	}
	public Double getTamanhoLote() {
		return tamanhoLote;
	}
	public void setTamanhoLote(Double tamanhoLote) {
		this.tamanhoLote = tamanhoLote;
	}
	public Date getDatainicio() {
		return datainicio;
	}
	public void setDatainicio(Date datainicio) {
		this.datainicio = datainicio;
	}
	public Date getDatatermino() {
		return datatermino;
	}
	public void setDatatermino(Date datatermino) {
		this.datatermino = datatermino;
	}
	public Integer getQuantApAndar() {
		return quantApAndar;
	}
	public void setQuantApAndar(Integer quantApAndar) {
		this.quantApAndar = quantApAndar;
	}
	public Integer getQuantAndares() {
		return quantAndares;
	}
	public void setQuantAndares(Integer quantAndares) {
		this.quantAndares = quantAndares;
	}
	public String getDescricaAreaLazer() {
		return descricaAreaLazer;
	}
	public void setDescricaAreaLazer(String descricaAreaLazer) {
		this.descricaAreaLazer = descricaAreaLazer;
	}
	public byte[] getImagem() {
		return imagem;
	}
	public void setImagem(byte[] imagem) {
		this.imagem = imagem;
	}
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((apartamentos == null) ? 0 : apartamentos.hashCode());
		result = prime * result
				+ ((clientes == null) ? 0 : clientes.hashCode());
		result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
		result = prime * result
				+ ((construtora == null) ? 0 : construtora.hashCode());
		result = prime * result
				+ ((datainicio == null) ? 0 : datainicio.hashCode());
		result = prime * result
				+ ((datatermino == null) ? 0 : datatermino.hashCode());
		result = prime
				* result
				+ ((descricaAreaLazer == null) ? 0 : descricaAreaLazer
						.hashCode());
		result = prime * result
				+ ((descricaoGeral == null) ? 0 : descricaoGeral.hashCode());
		result = prime * result
				+ ((endereco == null) ? 0 : endereco.hashCode());
		result = prime * result
				+ ((etapasObra == null) ? 0 : etapasObra.hashCode());
		result = prime * result
				+ ((quantAndares == null) ? 0 : quantAndares.hashCode());
		result = prime * result
				+ ((quantApAndar == null) ? 0 : quantApAndar.hashCode());
		result = prime
				* result
				+ ((responsavelEngenheiro == null) ? 0 : responsavelEngenheiro
						.hashCode());
		result = prime
				* result
				+ ((responsavelGeral == null) ? 0 : responsavelGeral.hashCode());
		result = prime * result
				+ ((tamanhoLote == null) ? 0 : tamanhoLote.hashCode());
		result = prime * result + ((titulo == null) ? 0 : titulo.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Obra other = (Obra) obj;
		if (apartamentos == null) {
			if (other.apartamentos != null)
				return false;
		} else if (!apartamentos.equals(other.apartamentos))
			return false;
		if (clientes == null) {
			if (other.clientes != null)
				return false;
		} else if (!clientes.equals(other.clientes))
			return false;
		if (codigo == null) {
			if (other.codigo != null)
				return false;
		} else if (!codigo.equals(other.codigo))
			return false;
		if (construtora == null) {
			if (other.construtora != null)
				return false;
		} else if (!construtora.equals(other.construtora))
			return false;
		if (datainicio == null) {
			if (other.datainicio != null)
				return false;
		} else if (!datainicio.equals(other.datainicio))
			return false;
		if (datatermino == null) {
			if (other.datatermino != null)
				return false;
		} else if (!datatermino.equals(other.datatermino))
			return false;
		if (descricaAreaLazer == null) {
			if (other.descricaAreaLazer != null)
				return false;
		} else if (!descricaAreaLazer.equals(other.descricaAreaLazer))
			return false;
		if (descricaoGeral == null) {
			if (other.descricaoGeral != null)
				return false;
		} else if (!descricaoGeral.equals(other.descricaoGeral))
			return false;
		if (endereco == null) {
			if (other.endereco != null)
				return false;
		} else if (!endereco.equals(other.endereco))
			return false;
		if (etapasObra == null) {
			if (other.etapasObra != null)
				return false;
		} else if (!etapasObra.equals(other.etapasObra))
			return false;
		if (quantAndares == null) {
			if (other.quantAndares != null)
				return false;
		} else if (!quantAndares.equals(other.quantAndares))
			return false;
		if (quantApAndar == null) {
			if (other.quantApAndar != null)
				return false;
		} else if (!quantApAndar.equals(other.quantApAndar))
			return false;
		if (responsavelEngenheiro == null) {
			if (other.responsavelEngenheiro != null)
				return false;
		} else if (!responsavelEngenheiro.equals(other.responsavelEngenheiro))
			return false;
		if (responsavelGeral == null) {
			if (other.responsavelGeral != null)
				return false;
		} else if (!responsavelGeral.equals(other.responsavelGeral))
			return false;
		if (tamanhoLote == null) {
			if (other.tamanhoLote != null)
				return false;
		} else if (!tamanhoLote.equals(other.tamanhoLote))
			return false;
		if (titulo == null) {
			if (other.titulo != null)
				return false;
		} else if (!titulo.equals(other.titulo))
			return false;
		return true;
	}
	
	
	
	
	
}
